package com.yungu.swift.system.marketing.service;

import com.yungu.swift.base.ResponseData;
import com.yungu.swift.base.model.PageVo;
import com.yungu.swift.base.service.BaseService;
import com.yungu.swift.system.marketing.model.dto.MarketingGiftDto;
import com.yungu.swift.system.marketing.model.param.AdminCouponGiftHistoryPageParam;
import com.yungu.swift.system.marketing.model.param.AdminCouponGiftParam;
import com.yungu.swift.system.marketing.model.vo.AdminMarketingGiftVo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


/**
 * Copyright © 厦门云谷互联信息有限公司 2018-2020 All Right Reserved
 * <p>
 * 优惠券礼包业务逻辑接口
 *
 * @author xiuyin.cui - Generate
 * @version 1.1.0-SNAPSHOT
 * @since 2019-04-25 13:50
 */
public interface MarketingGiftService extends BaseService<MarketingGiftDto> {

    /**
     * 优惠券新增和更新
     *
     * @param couponGiftParam
     * @param hasChangeCoupon
     * @return
     */
    ResponseData<Boolean> saveOrUpdate(AdminCouponGiftParam couponGiftParam, boolean hasChangeCoupon);

    /**
     * 明细
     *
     * @param uuid 参数
     * @return MarketingGiftDto
     */
    ResponseData<AdminMarketingGiftVo> detail(String uuid);

    /**
     * 设置礼包状态（开启或关闭）
     *
     * @param uuid   参数
     * @param status 参数
     * @return ResponseData
     */
    ResponseData<Boolean> setStatus(String uuid, Integer status);

    /**
     * 历史发放记录分页查询
     *
     * @param historyPageParam
     * @return
     */
    ResponseData<PageVo<MarketingGiftDto>> historyGiftQueryPage(AdminCouponGiftHistoryPageParam historyPageParam);


    /**
     * 根据司机邀请类型获取司机返现金额
     *
     * @param subType 参数
     * @return BigDecimal
     */
    ResponseData<BigDecimal> getAwardAmount(Integer subType);

    /**
     * 领取二维码礼包 (调用底下方法，默认为非新用户)
     *
     * @param appid         参数
     * @param passengerUuid 参数
     * @param giftUuid      参数
     * @param cid           参数
     * @return ResponseData
     */
    ResponseData<Map<String, Object>> drawQrCodeGift(String appid, String passengerUuid, String giftUuid, String cid);

    /**
     * 领取二维码礼包
     *
     * @param appid         参数
     * @param passengerUuid 参数
     * @param giftUuid      参数
     * @param cid           参数
     * @param isNewUser     参数
     * @return ResponseData
     */
    ResponseData<Map<String, Object>> drawQrCodeGift(String appid, String passengerUuid, String giftUuid, String cid, boolean isNewUser);

    /**
     * 发送指定人群礼包，根据传入的礼包条件查询出所有的礼包并且发送给用户(用于沉睡用户和高频用户和连续叫单不成功用户)
     *
     * @param passengerUuids 参数
     * @param getMode        参数  3、唤醒沉睡用户。4、激励高频用户。5、安慰连续叫单不成功用户
     * @return ResponseData
     */
    ResponseData<Boolean> sendAppointGift(List<String> passengerUuids, Integer getMode);

    /**
     * 司机邀请司机（现金返现）
     *
     * @param mobile 参数
     */
    void drawDriverInviteDriverGift(String mobile, String inviteLogUuid);


    ResponseData<MarketingGiftDto> findGiftByMap(Map<String, Object> map);

    ResponseData<Map<String, Boolean>> isOpenCity(String adCode, Integer type);
}